package com.example.basic.demos.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
/**
 * 用来指定当前创建的注解作用于什么地方，如@Target({ElementType.TYPE})标识自定义注解可以作用于类、解耦或枚举类型上。注解取值范围为枚举常量ElementType的所有值，有：
 *
 * ElementType.TYPE：用于类、接口或枚举声明
 * ElementType.FIELD：用于字段声明
 * ElementType.METHOD：用于方法声明
 * ElementType.PARAMETER：用于正式的参数声明
 * ElementType.CONSTRUCTOR：用于构造函数声明
 * ElementType.LOCAL_VARIABLE：用于局部变量声明
 * ElementType.ANNOTATION_TYPE：用于注解类型声明
 * ElementType.PACKAGE：用于包声明
 */
@Retention(RetentionPolicy.RUNTIME)
/**
 * Retention注解代表了一个注解的生命周期，其值对应了注解会留存到什么时候，如编译阶段、运行阶段等。
 * 使用时与RetentionPolicy枚举常量配合，如@Retention({RetentionPolicy.Runtime})，所有取值有：
 *
 * Retention({RetentionPolicy.SOURCE})：表示定义注解指保存在源码级别，编译时会忽略。
 * Retention({RetentionPolicy.CLASS})：表示注解将会在编译时保存在类文件中，运行时不保留。
 * Retention({RetentionPolicy.Runtime})：表示注解在编译时和运行时都存在，且可以被反向读取。
 *
 */
public @interface TestAnnotation {
    
}
